package tec;

public class PassagerAbstraitExceptionTest{

	public void convertTransport2Bus(){
		try{
		Transport q1= FabriqueBus.faireBus(2,2);
		Passager p1=  new Sportif("otman",4,FabriqueComportement.fairePoli());
		p1.monterDans(q1);
		}
		catch(TecInvalidException e){
			assert false:"fff";
		}
		try{
			Transport q2 = new FauxTransport();
			Passager p2=  new Sportif("otman",4,FabriqueComportement.fairePoli());
			p2.monterDans(q2);
			assert false:"exception non capturee";
		
		}
		catch(TecInvalidException e){
			assert true:"probleme";
		}		
		
	}
	

	public void testIllegalStateExceptionUbiquity(){
		Transport q1= FabriqueBus.faireBus(2,2);
		Passager p1=  new Sportif("otman",4,FabriqueComportement.fairePoli());
		try{
			p1.monterDans(q1);
		}
		catch(TecInvalidException e){}
		catch(IllegalStateException e){
			assert false : "exception capturee a tord";
		}
		try{
			p1.monterDans(q1);
			assert false : "exception non capturee";
		}
		catch(TecInvalidException e){}
		catch(IllegalStateException e){
			assert true : "";
		}
	}

	public void testIllegalStateExceptionRedundantState(){
		Transport q1= FabriqueBus.faireBus(2,2);
		Passager p1=  new Repos("otman",4,FabriqueComportement.fairePoli());			
		Passager p2=  new Sportif("otoman",4,FabriqueComportement.fairePoli());			
		Bus b = (Bus) q1;
		try{
			p1.monterDans(q1);
			b.demanderChangerEnAssis(p1);
			assert false : "exception de redondance non capturee";
			
		}
		catch(TecInvalidException e){}
		catch(IllegalStateException e){
			assert true : "exception capturee a tord";
		}
		try{
			p2.monterDans(q1);	
			b.demanderChangerEnDebout(p2);
			assert false : "exception de redondance non capturee";
		}
		catch(TecInvalidException e){}
		catch(IllegalStateException e){
			assert true : "";
		}
	}
	

	public void testIllegalArgumentExceptionNegativeDestination(){
		Transport q1= FabriqueBus.faireBus(2,2);
		try{
			Passager p1=  new Repos("otman",-4,FabriqueComportement.fairePoli());			
			assert false:"exception non capturee";
		}
		catch(IllegalArgumentException e){
		}
	}


	public void testIllegalStateExceptionDestination(){
		Transport q1= FabriqueBus.faireBus(2,2);
		try{
		q1.allerArretSuivant();
		q1.allerArretSuivant();
		q1.allerArretSuivant();
		q1.allerArretSuivant();
		q1.allerArretSuivant();
		}
		catch(TecInvalidException e){}
		try{
			Passager p1=  new Repos("otman",3,FabriqueComportement.fairePoli());			
			p1.monterDans(q1);
			assert false: " destination depassee";
		}
		catch(TecInvalidException e){}
		catch(IllegalStateException e){

		}		

	}
	public void testIllegalArgumentExceptionNegativePlaces(){
		try{
			Transport q1= FabriqueBus.faireBus(-2,2);
			assert false:"non capture nombre place assise negative";
		}
		catch(IllegalArgumentException e){}
		try{
			Transport q1= FabriqueBus.faireBus(2,-2);
			assert false:"non capture nombre place debout negative";
		}
		catch(IllegalArgumentException e){}
	}
	public void lance(){
		System.err.println("Test d'exception Transport to Bus");
		convertTransport2Bus();
		System.err.println("OK");
		System.err.println("Test IllegalStateException ");
		System.err.println("Test ubiquite");
		testIllegalStateExceptionUbiquity();
		System.err.println("OK");
		System.err.println("Test redundant state");
		testIllegalStateExceptionRedundantState();
		System.err.println("OK");
		System.err.println("Test destination depassee");
		testIllegalArgumentExceptionNegativeDestination();
		System.err.println("OK");
		System.err.println("Test IllegalArgumentException ");
		System.err.println("Test negative destination");
		testIllegalArgumentExceptionNegativeDestination();
		System.err.println("OK");
		System.err.println("Test nombre de places negative");
		testIllegalArgumentExceptionNegativePlaces();
		System.err.println("OK");
	}
}
